package com.itheima.reggie.common;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

/*
    全局异常处理
 */
@Slf4j
// 意思就是拦截 类上方添加有 注解 restController 和 controller 的类
@RestControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody   // 返回信息给前端
public class GlobalExceptionHandler {

    /**
     * 全局异常的捕获处理方法（数据库异常）
     * @param exception
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> globalExceptionHandler(SQLIntegrityConstraintViolationException exception){
        //在控制台输出调试日志
        log.error(exception.getMessage());

        if (exception.getMessage().contains("23000")){
            return R.error("用户名已经存在");
        }
        //返回异常提示信息到前端
        return R.error("发生异常");
    }

    /**
     * 全局捕获 运行时异常
     * @param exception
     * @return
     */
    @ExceptionHandler(RuntimeException.class)
    public R<String> runTimeExceptionHandler(RuntimeException exception){
        //在控制台输出调试日志
        log.error(exception.getMessage());

        //返回异常提示信息到前端
        return R.error(exception.getMessage());
    }
}
